#ifndef ICHARACTER_HH
#define ICHARACTER_HH

#include "buffAndEffect.hh"
#include <iostream>
#include <string>
#include <array>
#include <vector>

class ICharacter {
    public:
      virtual ~ICharacter() = default;
      // battle methods
      virtual bool isAlive() const = 0;
      virtual void takeDamage(unsigned damage) = 0;
      virtual void healing(unsigned healing_amount) = 0;
      // virtual void takeBuff(buff_and_effect::Abuff& buff) = 0;
      // virtual void removeBuff(buff_and_effect::Abuff& buff) = 0;
      virtual void modifyRoundSpeed(int new_speed) = 0;
      virtual void sitRoundFinsh(bool b) = 0;
      virtual void changePosInteam(unsigned new_pos) = 0;
      virtual unsigned getSkillName() = 0;
      virtual unsigned getskill1Target() = 0;
      virtual unsigned getskill2Target() = 0;
      // Getters
      virtual std::string getName() const = 0;
      virtual std::string getDescription() const = 0;
      virtual unsigned getMaxHealth() const = 0;
      virtual unsigned getHealth() const = 0;
      virtual unsigned getSpeed() const = 0;
      virtual unsigned getPosInteam() const = 0;
      virtual unsigned getBlight() const = 0;
      virtual unsigned getBleed() const = 0;
      virtual unsigned getStun() const = 0;
      virtual unsigned getDodge() const = 0;
      // virtual std::vector<buff_and_effect::Abuff> getBuffs() const = 0;
      virtual std::string toString() const = 0;
      virtual bool getRoundFinsh() const = 0;
      virtual int getRoundSpeed() const = 0;
      virtual std::string getskill1_name() const = 0; 
      virtual std::string getskill2_name() const = 0;
      // 若实例化为hero要添加一getPressure  
      // Operator overloads
      virtual ICharacter& operator-=(unsigned damage) = 0; // For taking damage
      virtual ICharacter& operator+=(unsigned healing_amount) = 0;//回血
};

#endif